const mongoose = require('mongoose')

/**
 * 产品分类数据模型
 * 
 * 功能说明：
 * - 管理产品的分类信息，如"整形美容"、"皮肤护理"、"口腔美容"等
 * - 支持分类的增删改查操作
 * - 自动维护创建时间和更新时间
 * - 极简设计：只保留分类名称，操作简单高效
 * 
 * 使用场景：
 * - 产品管理页面的分类下拉选择
 * - 产品筛选功能
 * - 分类管理后台
 * 
 * 数据库集合名：producttypes
 */

// 产品分类模型
const productTypeSchema = new mongoose.Schema({
  // 分类名称 - 必填字段，用于显示在产品管理的分类下拉框中
  name: {
    type: String,        // 字符串类型
    required: true,      // 必填项，不能为空
    unique: true,        // 唯一索引，防止重复分类名称
    trim: true,          // 自动去除首尾空格
    maxlength: 50        // 最大长度50个字符，避免名称过长
  },
  
  // 创建时间 - 记录分类创建的时间戳
  createdAt: {
    type: Date,          // 日期类型
    default: Date.now    // 默认为当前时间
  },
  
  // 更新时间 - 记录分类最后修改的时间戳
  updatedAt: {
    type: Date,          // 日期类型
    default: Date.now    // 默认为当前时间，会通过中间件自动更新
  }
})

// 更新时间中间件 - 在保存文档前自动更新 updatedAt 字段
productTypeSchema.pre('save', function(next) {
  this.updatedAt = new Date()  // 设置为当前时间
  next()
})

// 更新时间中间件 - 在使用 findOneAndUpdate 等方法更新文档前自动更新 updatedAt 字段
productTypeSchema.pre('findOneAndUpdate', function(next) {
  this.set({ updatedAt: new Date() })  // 设置为当前时间
  next()
})

// 创建模型 - MongoDB 会自动将模型名 'producttype' 转换为集合名 'producttypes'
const ProductTypeModel = mongoose.model('producttype', productTypeSchema)

// 导出模型和 Schema，供其他模块使用
module.exports = {
  ProductTypeModel,    // 产品分类模型，用于数据库操作
  productTypeSchema    // 产品分类 Schema，可供其他模型引用
}
